#pragma once

#include "iostream"
#include "vector"
#include "algorithm"

using namespace std;

/*HJJ QQ479287006
 给定两个以字符串形式表示的非负整数 num1 和 num2，返回 num1 和 num2 的乘积，它们的乘积也表示为字符串形式。

注意：不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

 

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/multiply-strings
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。*
 * */
string multiply(string num1, string num2) {
    //翻转数组
    reverse(num1.begin(), num1.end());
    reverse(num2.begin(), num2.end());

    vector<int> res(num1.size() + num2.size() + 1, 0);

    int index;
    int div = 0;
    for (int i = 0; i < num1.size(); i++) {
        int temp = num1[i] - '0';


        index = i;
        for (int j = 0; j < num2.size(); j++) {
            int result = temp * (num2[j] - '0') + div + res[index];
            div = 0;
            div = result / 10;
            int mod = result % 10;
            res[index++] = mod;
        }
        res[index] = div;
        div = 0;

    }

    if (div != 0) {
        res[index] = div;
    }
    string r;
    reverse(res.begin(), res.end());
    for (int i = 0; i < res.size(); i++) {

        r = r + to_string(res[i]);
    }

    while (r.size() > 1 && r[0] == '0') {
        r.erase(0, 1);
    }

    return r;
}